package com.laogao.lesson096.状态模式2;

/**
 * 状态模式】：人有“状态”，每种状态能干的事不同
 * 你是一个人，你会有以下状态：
 * <p>
 * 睡觉状态：不能工作，不能打游戏
 * <p>
 * 工作状态：能敲代码，不能睡觉
 * <p>
 * 打游戏状态：能玩游戏，不能工作
 * <p>
 * 你当前是“睡觉状态”，别人叫你“写代码”没反应；你一旦醒了，切换到“工作状态”，你就可以写代码。
 * <p>
 * 状态模式 = 状态决定你能干啥 + 状态自己控制怎么切换到下一个状态。
 * <p>
 * 🔁 行为随着状态自动变化。
 * <p>
 * 状态模式特点：
 * 当前状态决定你能干什么
 * 状态之间会自动切换（比如：睡觉 ➡ 醒来 ➡ 工作）
 * 对象“行为”和“状态”绑定在一起
 */
interface HumanState {
    void doSomething(); // 当前状态下能干啥
}

class SleepingState implements HumanState {
    public void doSomething() {
        System.out.println("我在睡觉，不能工作");
    }
}

class WorkingState implements HumanState {
    public void doSomething() {
        System.out.println("我在工作，写代码");
    }
}

class Person {
    private HumanState state;

    public void setState(HumanState state) {
        this.state = state;
    }

    public void doSomething() {
        state.doSomething();
    }
}
